package com.huaishushu.controller;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.huaishushu.common.R;
import com.huaishushu.dto.DishDto;
import com.huaishushu.dto.SetmealDto;
import com.huaishushu.entity.Setmeal;
import com.huaishushu.service.ISetmealDishService;
import com.huaishushu.service.ISetmealService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 套餐 前端控制器
 * </p>
 *
 * @author ChiBaoBaoHuaiShuShu
 * @since 2023-05-28
 */
@RestController
@RequestMapping("/setmeal")
@Slf4j
public class SetmealController {

    @Autowired
    private ISetmealService setmealService;

    @Autowired
    private ISetmealDishService setmealDishService;

    /**
     * 添加套餐信息
     * 操作两张表，setmeal_dish和setmeal表
     * @param setmealDto
     * @return
     */
    @PostMapping
    public R<String> saver(@RequestBody SetmealDto setmealDto) {
        log.info("新增套餐信息：{}",setmealDto);

        setmealService.saverWithDish(setmealDto);
        return R.success("添加套餐成功");
    }

    /**
     * 套餐信息分页查询
     * @param page
     * @param pageSize
     * @param name
     * @return
     */
    @GetMapping("/page")
    public R<Page<SetmealDto>> page(Integer page,Integer pageSize,String name) {
        Page<SetmealDto> setmealDtoPage = setmealService.page(page, pageSize, name);
        log.info("菜品信息分页查询：{}",setmealDtoPage);
        return R.success(setmealDtoPage);
    }

    /**
     * 根据id字符串来批量删除套餐信息
     * @param ids
     * @return
     */
    @DeleteMapping
    public R<String> delete(String ids) {
        log.info("删除的套餐id为：{}",ids);
        String[] split = ids.split(",");
        setmealService.delete(split);
        return R.success("删除套餐成功");
    }

    /**
     * 根据套餐id来查询套餐的基本信息以及套餐所对应的菜品信息
     * @param setmealId
     * @return
     */
    @GetMapping("{setmealId}")
    public R<SetmealDto> getByIdWithDish(@PathVariable("setmealId") Long setmealId) {
        SetmealDto setmealDto = setmealService.getByIdWithDish(setmealId);
        return R.success(setmealDto);
    }

    /**
     * 修改套餐信息，操作的是两张表，还需要插入菜品信息
     * @param setmealDto
     * @return
     */
    //@PutMapping
    public R<String> update(@RequestBody SetmealDto setmealDto) {
        setmealService.updateWithDish(setmealDto);
        return R.success("修改套餐信息成功");
    }

    /**
     * 根据传递回来的status来判断是启用还是修改操作
     * 之后根据id来批量修改
     * @param status
     * @param ids
     * @return
     */
    @PostMapping("/status/{status}")
    public R<String> updateStatusById(@PathVariable("status") Integer status, String ids) {
        //应为参数ids为String类型的参数，并且里面的id用 , 隔开，因此我们需要将其分割出来
        String[] split = ids.split(",");
        setmealService.updateStatusById(status, split);
        return R.success("修改状态成功");
    }

    /**
     * 展示前台的套餐中的所有套餐信息以及套餐中对应的菜品信息。
     * 此处返回值类型是List<Setmeal>也是可以的，但是我写成这样的目的是因为方便以后扩展做准备，套餐管理页面显示所有套餐信息以及套餐所对应的菜品信息。
     * @param setmeal
     * @return
     */
    @GetMapping("/list")
    public R<List<SetmealDto>> list(Setmeal setmeal) {
        log.info("根据条件来展示前台的套餐中的所有套餐信息以及套餐中对应的菜品信息，条件为：{}",setmeal);
        List<SetmealDto> setmealDtoList =  setmealService.listSetmealDto(setmeal);

        return R.success(setmealDtoList);
    }

    /**
     * 前台查看套餐信息中的菜品信息
     * 根据套餐id来查询菜品的信息
     * @param setmealId
     * @return
     */
    @GetMapping("/dish/{SetmealId}")
    public R<List<DishDto>> getListDishDtoById(@PathVariable("SetmealId") Long setmealId) {
        log.info("根据套餐id来查询菜品的信息，ID为：{}",setmealId);
        List<DishDto> dishDtoList = setmealService.getListDishDtoById(setmealId);

        return R.success(dishDtoList);
    }





}
